<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="Imra3" id="Imra3"><span data-lake-id="u9b0c709e" id="u9b0c709e">典型回答</span></h1>
  <p data-lake-id="u62503d66" id="u62503d66"><br></p>
  <p data-lake-id="u3be208bc" id="u3be208bc"><span data-lake-id="u88df4416" id="u88df4416">Mybatis通过ResultSet对象来获取SQL查询返回的结果集，然后将结果集中的每行记录映射到Java对象中。在字段映射过程中，Mybatis提供了以下几种方式：</span></p>
  <p data-lake-id="u9d219ee6" id="u9d219ee6"><span data-lake-id="u414fb615" id="u414fb615">​</span><br></p>
  <ol list="ub54283ef">
   <li fid="u50d60280" data-lake-id="u66b1df5d" id="u66b1df5d"><strong><span data-lake-id="u8f2d37a1" id="u8f2d37a1">使用列名映射</span></strong><span data-lake-id="uf3b4072e" id="uf3b4072e">：Mybatis默认使用列名来映射查询结果集中的列与Java对象中的属性。如果列名和Java对象属性名不完全一致，可以通过在SQL语句中使用“AS”关键字或使用别名来修改列名。</span></li>
  </ol>
  <p data-lake-id="u790e2463" id="u790e2463"><br></p>
  <ol list="ub54283ef" start="2">
   <li fid="u50d60280" data-lake-id="u0dba813d" id="u0dba813d"><strong><span data-lake-id="u5571e32d" id="u5571e32d">使用别名映射</span></strong><span data-lake-id="u0692f350" id="u0692f350">：如果查询语句中使用了别名，则Mybatis会优先使用列别名来映射Java对象属性名，而不是列名。</span></li>
  </ol>
  <p data-lake-id="u7e5813ce" id="u7e5813ce"><br></p>
  <ol list="ub54283ef" start="3">
   <li fid="u50d60280" data-lake-id="ub7380947" id="ub7380947"><strong><span data-lake-id="ubb883b7f" id="ubb883b7f">使用ResultMap映射</span></strong><span data-lake-id="u83d22675" id="u83d22675">：ResultMap是Mybatis用来映射查询结果集和Java对象属性的关系。可以在映射文件中定义ResultMap，指定Java对象和列之间的映射关系。通过ResultMap，可以实现复杂的字段映射关系和转换。</span></li>
  </ol>
  <p data-lake-id="u85b02bba" id="u85b02bba"><br></p>
  <ol list="ub54283ef" start="4">
   <li fid="u50d60280" data-lake-id="u2dfc4136" id="u2dfc4136"><strong><span data-lake-id="u960d199b" id="u960d199b">自定义TypeHandler映射</span></strong><span data-lake-id="udc4a4eba" id="udc4a4eba">：如果默认的字段映射方式无法满足需求，可以通过实现TypeHandler接口来自定义字段映射规则。TypeHandler可以将查询结果集中的列类型转换为Java对象属性类型，并将Java对象属性类型转换为SQL类型。可以通过在映射文件中定义TypeHandler，来实现自定义映射。</span></li>
  </ol>
  <p data-lake-id="ub50d98c0" id="ub50d98c0"><br></p>
  <p data-lake-id="u91299093" id="u91299093"><span data-lake-id="u2a8a4113" id="u2a8a4113">总之，Mybatis提供了多种灵活的字段映射方式，可以满足不同场景下的需求。</span></p>
  <p data-lake-id="ua55b5110" id="ua55b5110"><span data-lake-id="u9767a813" id="u9767a813">​</span><br></p>
  <p data-lake-id="ud3cf0b1c" id="ud3cf0b1c"><span data-lake-id="u91ce2747" id="u91ce2747">​</span><br></p>
  <h1 data-lake-id="OqoKK" id="OqoKK"><span data-lake-id="u51cfeb99" id="u51cfeb99">扩展知识</span></h1>
  <p data-lake-id="u5cc5490d" id="u5cc5490d"><br></p>
  <h2 data-lake-id="D33wZ" id="D33wZ"><span data-lake-id="u10eeeb54" id="u10eeeb54">字段映射的过程及原理</span></h2>
  <p data-lake-id="u97304577" id="u97304577"><br></p>
  <p data-lake-id="u8753ef57" id="u8753ef57"><span data-lake-id="u97a428b8" id="u97a428b8">Mybatis实现字段映射的代码主要在</span><strong><span data-lake-id="uba6b2809" id="uba6b2809">ResultSetHandler</span></strong><span data-lake-id="u840eecb9" id="u840eecb9">类中。该类是Mybatis查询结果集处理的核心类，负责将JDBC ResultSet对象转换为Java对象，并进行字段映射。</span></p>
  <p data-lake-id="u7332ff64" id="u7332ff64"><span data-lake-id="u490467e8" id="u490467e8">​</span><br></p>
  <p data-lake-id="ud146e788" id="ud146e788"><span data-lake-id="u45bbffc7" id="u45bbffc7">Mybatis实现字段映射的原理可以简单描述为以下几个步骤：</span></p>
  <p data-lake-id="u6b4e75b6" id="u6b4e75b6"><span data-lake-id="u31695d7b" id="u31695d7b">​</span><br></p>
  <ol list="ue5830bbe" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="uc8f87634" id="uc8f87634"><span data-lake-id="ub06ac5cd" id="ub06ac5cd">Mybatis通过JDBC API向数据库发送SQL查询语句，并</span><strong><span data-lake-id="u4e4a718b" id="u4e4a718b">获得查询结果集</span></strong><span data-lake-id="uec8f6a60" id="uec8f6a60">。</span></li>
  </ol>
  <p data-lake-id="udf7b5716" id="udf7b5716"><br></p>
  <ol list="ue5830bbe" start="2" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="uf2bb4f31" id="uf2bb4f31"><span data-lake-id="u3e6a76b3" id="u3e6a76b3">查询结果集中的每一行数据都被</span><strong><span data-lake-id="ua0a7a878" id="ua0a7a878">封装成一个ResultSet对象</span></strong><span data-lake-id="u036f9668" id="u036f9668">，Mybatis</span><strong><span data-lake-id="u7f8f0b29" id="u7f8f0b29">遍历ResultSet对象中的数据</span></strong><span data-lake-id="u074ca03f" id="u074ca03f">。</span></li>
  </ol>
  <p data-lake-id="u8ab57da5" id="u8ab57da5"><br></p>
  <ol list="ue5830bbe" start="3" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="u5b65f6c6" id="u5b65f6c6"><span data-lake-id="ub1dd1035" id="ub1dd1035">对于每一行数据，Mybatis根据Java对象属性名和查询结果集中的列名进行匹配。如果匹配成功，则将查询结果集中的该列数据映射到Java对象的相应属性中。</span></li>
  </ol>
  <p data-lake-id="uac43035e" id="uac43035e"><br></p>
  <ol list="ue5830bbe" start="4" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="uaf6f789b" id="uaf6f789b"><span data-lake-id="u76ef9c74" id="u76ef9c74">如果Java对象属性名和查询结果集中的列名不完全一致，Mybatis可以通过在SQL语句中使用“AS”关键字或使用别名来修改列名，或者使用ResultMap来定义Java对象属性和列的映射关系。</span></li>
  </ol>
  <p data-lake-id="u0644921d" id="u0644921d"><br></p>
  <ol list="ue5830bbe" start="5" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="ua07c3e71" id="ua07c3e71"><span data-lake-id="u9e0e1046" id="u9e0e1046">对于一些复杂的映射关系，例如日期格式的转换、枚举类型的转换等，可以通过自定义TypeHandler来实现。Mybatis将自定义TypeHandler注册到映射配置中，根据Java对象属性类型和查询结果集中的列类型进行转换。</span></li>
  </ol>
  <p data-lake-id="uc1a2239f" id="uc1a2239f"><br></p>
  <ol list="ue5830bbe" start="6" data-lake-index-type="true">
   <li fid="ue43dbc41" data-lake-id="uc80c7cea" id="uc80c7cea"><span data-lake-id="u68e92d74" id="u68e92d74">最终，Mybatis将所有映射成功的Java对象封装成一个List集合，返回给用户使用。</span></li>
  </ol>
  <p data-lake-id="u1f4497bb" id="u1f4497bb"><br></p>
  <p data-lake-id="u132f0df3" id="u132f0df3"><span data-lake-id="u038f7285" id="u038f7285">总之，Mybatis通过查询结果集中的列名和Java对象属性名之间的映射关系，将查询结果集中的数据映射到Java对象中。Mybatis提供了多种灵活的映射方式，可以满足不同场景下的需求。</span></p>
  <p data-lake-id="u32d19843" id="u32d19843"><span data-lake-id="uc0c24564" id="uc0c24564">​</span><br></p>
  <p data-lake-id="u483ee321" id="u483ee321"><br></p>
 </body>
</html>